package com.ihelp.rest.utils;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 时间类型的工具类。
 * 主要包含所有针对时间型的类型数据操作的工具方法
 */
public class DateUtil {
	
	/**
	 * 将一个date型变量转换成为BigDecimal型。
	 * 将一个date型转换成BigDecimal，转换后的形式为20110918.091823
	 * @param date 日期型变量
	 * @return 转换后的变量
	 */
	public static BigDecimal date2BigDecimal(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd.HHmmss");
		String s = sdf.format(date);
		return BigDecimal.valueOf(Double.valueOf(s));
	}
	
	/**
	 * 将当前时间转换成为float型对象
	 * @return float型对象
	 */
	public static BigDecimal nowDate2BigDecimal() {
		Date date = new Date();
		return date2BigDecimal(date);
	}
	
	/**
	 * 将一个BigDecimal型数字转换成一个日期
	 * @param bigdecimal
	 * @return
	 */
	public static Date bigDecimal2Date(BigDecimal bigdecimal) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd.HHmmss");
		Date date;
		try {
			date = sdf.parse(bigdecimal.setScale(6, BigDecimal.ROUND_HALF_UP).toString());
			return date;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 日期型格式化成字符串
	 * @param date
	 * @return
	 */
	public static String date2String(Date date) {
		return date2String(date, "yyyy-MM-dd");
	}
	
	/**
	 * 日期型格式化成字符串
	 * @param date
	 * @param formate
	 * @return
	 */
	public static String date2String(Date date, String formate) {
		SimpleDateFormat sdf = new SimpleDateFormat(formate);
		String result = sdf.format(date);
		return result;
	}
	
	/**
	 * 字符串转换成日期
	 * @param value
	 * @return
	 */
	public static Date string2Date(String source, String format){
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try {
			return sdf.parse(source);
		} catch (ParseException e) {
			e.printStackTrace();
			return new Date();
		}
	}
	
	/**
	 * 获得当前年份
	 * @return
	 */
	public static Integer getCurrentYear() {
		Calendar c = Calendar.getInstance();
		return c.get(Calendar.YEAR);
	}
	
	/**
	 * 获得当前月份
	 * @return
	 */
	public static Integer getCurrentMonth() {
		Calendar c = Calendar.getInstance();
		return c.get(Calendar.MONTH) + 1;
	}
	
	public static boolean isStringValidDate(String date){
		if(date == null || date.equals("")){
			return false;
		}
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			 sdf.parse(date);
			 return true;
		} catch (ParseException e) {
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 比较两个字符串的先后
	 * @param newDate
	 * @param oldStartDate
	 * @return
	 */
	public static boolean before(String firstDate, String secondDate) {
		if(!isStringValidDate(firstDate) || !isStringValidDate(secondDate)){
			return false;
		}
		Date first = string2Date(firstDate,"yyyy-MM-dd");
		Date second = string2Date(secondDate,"yyyy-MM-dd");
		return first.before(second);
	}
}
